#include <iostream>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
using namespace std;

void work()
{
    int cnt = 5;
    while(cnt--)
    {
        cout<<"child process, pid: "<<getpid()<<" ppid: "<<getppid()<<" cnt: "<<cnt<<endl;
    }
}

int n =3;
int main()
{
    for(int i = 0; i<n; i++)
    {
        pid_t id = fork();
        if(id == 0)
        {
            work();
        }
    }
    for(int i = 0; i<n; i++)
    {
        pid_t rid = waitpid(-1,NULL,0);
        if(rid > 0)
            cout<<"success, rid: "<<rid<<endl;
    }

//    pid_t id = fork();
//    if(id == 0)
//    {
//        work();
//        exit(10);
//    }
//    else
//    {
//       // sleep(10);
//        cout<<"before"<<endl;
//        int status = 0;
//        pid_t rid = waitpid(id, &status, 0);
//        cout<<"after"<<endl;
//        if(rid == id)
//        {
//            //printf("wait success, pid:%d, exit sig:%d, exit code:%d\n",getpid(),status&0x7F,(status>>8)&0xFF);
//            printf("wait success, pid:%d, exit sig:%d, exit code:%d\n",getpid(),WIFEXITED(status),WEXITSTATUS(status));
//            //cout<<"wait success, pid: "<<getpid()<<" status: "<<status<<endl;
//            // sleep(2);
//        }
//    }
//
    return 0;
}
